package session

import (
	"time"

	"gitee.com/mkwchecking/sr-core/yal/yconv"
)

type Info struct {
	UserId   string    `json:"userId"`                                    // 用户ID
	UserName string    `json:"userName"`                                  // 用户名
	RoleId   string    `json:"roleId"`                                    // 角色ID
	DeptId   string    `json:"deptId"`                                    // 部门ID
	TenantId string    `json:"tenantId"`                                  // 租户ID
	Ip       string    `json:"ip"`                                        // 登录IP地址
	LoginAt  time.Time `json:"loginAt" time_format:"2006-01-02 15:04:05"` // 登录时间
	Expire   int       `json:"expire,string"`                             // 会话有效期(s)

	origin map[string]any `json:"-"`
}

func (i Info) GetOrigin() map[string]any {
	return i.origin
}

func (i Info) ToMap() (map[string]any, error) {
	return yconv.AnyToObjG[map[string]any](i)
}

func (i Info) GetUserId() any {
	return i.UserId
}

func NewInfo() *Info {
	return &Info{}
}

func ScanInfo(val map[string]any) (*Info, error) {
	info := NewInfo()
	err := yconv.AnyToObj(val, info)
	info.origin = val
	return info, err
}
